def border():
    # 功能：打印边框
    print('-' * 26)


def leap(year):
    '''
    判断平年瑞年
    :param year: 输入年份
    :return: 平年返回0，瑞年返回1
    '''
    four = year % 4
    hundred = year % 100
    fourhundred = year % 400
    if hundred == 0 and fourhundred == 0:  # 瑞年
        return 1
    elif hundred != 0 and four == 0:  # 瑞年
        return 1
    else:
        return 0  # 平年


def day_sum(year, month, leap_year_list, common_year_list, sum_day):
    '''
    统计从1900年1月1日至今有多少年
    :param year: 输入年
    :param month: 输入月
    :param day: 输入天
    :param leap_year_list: 瑞年每月天数列表
    :param common_year_list: 平年每月天数列表
    :return: sum_day总天数
    '''
    # 计算所有年份的天数
    for i in range(1900, year):
        if leap(i) == 1:
            sum_day += 366

        else:
            sum_day += 365

    # 计算所有月份的天数
    for i in range(0, month - 1):
        if leap(i) == 1:
            sum_day += leap_year_list[i]

        else:
            sum_day += common_year_list[i]

    return sum_day


def print_result(sum_day, year, month, leap_year_list, common_year_list):
    '''
    打印日期
    :param sum_day: 间隔的总天数
    :param year: 年份
    :param month: 月份
    :return: None
    '''
    result = sum_day % 7
    # 打印空格
    for i in range(result):
        print(end='\t')

    space_begin = 7 - result  # 计算空格后的位置

    # 瑞年
    if leap(year) == 1:
        for i in range(1, leap_year_list[month - 1] + 1):
            print('{}\t'.format(i), end='')
            if i == space_begin or (i - space_begin) % 7 == 0:  # 判断插入换行符的位置
                print('', end='\n')

    else:
        for i in range(1, common_year_list[month - 1] + 1):
            print('{}\t'.format(i), end='')
            if i == space_begin or (i - space_begin) % 7 == 0:  # 判断插入换行符的位置
                print(end='\n')


def main():
    # 1.定义需要的信息
    leap_year_list = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]  # 瑞年
    common_year_list = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]  # 平年
    weekday = ["一", "二", "三", "四", "五", "六", "七"]  # 排列每个星期
    sum_day = 0  # 与输入相距的天数

    # 2.输入模块
    year = int(input('输入年：'))
    month = int(input('输入月：'))
    day = int(input('输入日：'))
    print(year, month, day)

    # 3.显示模块
    print('\t\t\t万年历\t\t\t')
    border()
    for i in weekday:  # 打印星期
        print(i, '\t', end='')
    print(end='\n')

    sum_day = day_sum(year, month, leap_year_list, common_year_list, sum_day)

    print_result(sum_day, year, month, leap_year_list, common_year_list)
    print(end='\n')
    border()


if __name__ == '__main__':
    main()
